package com.atguigu.gmall.web.controller;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.client.ProductFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.List;

/**
 * @author: atguigu
 * @create: 2023-06-14 15:38
 */
@Controller
public class indexHtmlController {


    @Autowired
    private ProductFeignClient productFeignClient;

    /**
     * 渲染首页
     *
     * @param model
     * @return
     */
    @GetMapping({"/", "", "/index.html"})
    public String indexHtml(Model model) {
        //1.远程调用商品模块获取分类列表
        List<JSONObject> baseCategoryList = productFeignClient.getBaseCategoryList();
        //TODO 首页中其他页面渲染数据 来源其他微服务
        //TODO 调用内存推荐服务得到推荐商品列表
        //TODO 调用订单服务得到热门下单商品
        //TODO 调用广告服务获取广告列表
        //TODO 异步编排优化
        //2.给模型赋值
        model.addAttribute("list", baseCategoryList);
        //3.渲染页面模板
        return "/index/index";
    }


    @Autowired
    private TemplateEngine templateEngine;


    /**
     * Thymeleaf生成首页静态页面文件,将文件部署到Nginx
     *
     * @return
     */
    @GetMapping("createIndex")
    @ResponseBody
    public Result createIndex() throws IOException {
        //1.准备动态生成页面模板文件名称
        String templateName = "/index/index";
        //2.构建上下文对象-封装模板所需数据模型
        //1.远程调用商品模块获取分类列表
        List<JSONObject> baseCategoryList = productFeignClient.getBaseCategoryList();
        Context context = new Context();
        context.setVariable("list", baseCategoryList);
        //3.构建写文件对象,将生成静态页写入到磁盘文件
        Writer fileWriter = new FileWriter("D:\\temp\\index.html");
        templateEngine.process(templateName, context, fileWriter);
        return Result.ok();
    }


}
